package com.crawler.system.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.time.LocalDateTime;

/**
 * 代理IP实体类
 * 用于管理和追踪系统使用的代理IP资源，支持代理池的自动化管理
 *
 * @author crawler-system
 */
@Data
@TableName("proxy_ip")
public class ProxyIp {

    /**
     * 主键ID，自增长
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * IP地址
     * 如：192.168.1.1
     */
    private String ipAddress;

    /**
     * 端口号
     * 如：8080
     */
    private Integer port;

    /**
     * 代理类型
     * HTTP, HTTPS, SOCKS4, SOCKS5
     */
    private String type;

    /**
     * 代理位置/国家/地区
     * 如：中国-北京, 美国-纽约
     */
    private String location;

    /**
     * ISP提供商
     * 如：电信, 联通, Amazon AWS
     */
    private String provider;

    /**
     * 匿名级别
     * TRANSPARENT: 透明代理，暴露真实IP
     * ANONYMOUS: 匿名代理，不暴露真实IP但暴露代理身份
     * ELITE: 高匿代理，不暴露真实IP和代理身份
     */
    private String anonymityLevel;

    /**
     * 响应时间(毫秒)
     * 代理的响应速度，用于性能评估和选择
     */
    private Integer responseTime;

    /**
     * 最后检测时间
     * 上一次代理有效性检测的时间
     */
    private LocalDateTime lastCheckTime;

    /**
     * 最后使用时间
     * 上一次使用该代理的时间
     */
    private LocalDateTime lastUsedTime;

    /**
     * 成功次数
     * 使用该代理成功的次数
     */
    private Integer successCount;

    /**
     * 失败次数
     * 使用该代理失败的次数
     */
    private Integer failCount;

    /**
     * 平均响应时间(毫秒)
     * 所有成功请求的平均响应时间
     */
    private Long avgResponseTime;

    /**
     * 总请求次数
     * 使用该代理的总请求数，用于负载均衡和统计
     */
    private Integer totalRequests;

    /**
     * 成功请求次数
     * 使用该代理成功的请求数，用于计算成功率
     */
    private Integer successRequests;

    /**
     * 状态
     * AVAILABLE: 可用
     * UNAVAILABLE: 不可用
     * CHECKING: 检测中
     * BANNED: 已被目标网站封禁
     * EXPIRED: 已过期
     */
    private String status;

    /**
     * 过期时间
     * 商业代理的过期时间，null表示永不过期
     */
    private LocalDateTime expireTime;

    /**
     * 可用网站标签
     * 逗号分隔的网站标识符列表，表示该代理适用的网站，如"taobao,jd,tmall"
     */
    private String availableSites;

    /**
     * 用户名
     * 需要认证的代理服务器用户名
     */
    private String username;

    /**
     * 密码
     * 需要认证的代理服务器密码，存储加密后的值
     */
    private String password;

    /**
     * 是否为专用代理
     * true: 专用于特定网站的代理
     * false: 通用代理
     */
    private Boolean dedicated;

    /**
     * 代理来源
     * API: 从API服务获取
     * SPIDER: 爬虫自动发现
     * MANUAL: 手动添加
     * PURCHASE: 付费购买
     */
    private String source;

    /**
     * 备注信息
     * 管理员可添加的附加信息
     */
    private String remark;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    private LocalDateTime updateTime;
} 
